package pikasial.fs;

import java.io.File;
import javax.swing.filechooser.FileFilter;

import pikasial.utils.ExtensionsImages;

/**
 * Définit un filtre de fichiers qui n'affiche que les images
 * dont le format est supporté par l'application.
 * <p>
 * L'application supporte les formats :
 * <ul><li> JPEG
 * <li> BMP
 * <li> PNG
 * <li> GIF</ul>
 * Le filtre est utilisé par les <code>JFileChooser</code> et
 * se base sur l'extension du fichier.
 *
 * @author ESIAL - Groupe 14
 */
public final class ImageFilter extends FileFilter {

    /**
     * Construit le filtre.
     */
    public ImageFilter() {
        super();
    }

    /**
     * Teste si le fichier est accepté par le filtre.
     *
     * @param f - le fichier à tester
     * @return true si le fichier est une image supportée, false sinon
     * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
     */
    @Override
    public boolean accept(final File f) {
        if (f.isDirectory()) {
            return true;
        }

        String ext = ExtensionsImages.getExtensionFichier(f);
        if (ext == null) {
            return false;
        } else {
            return ExtensionsImages.isValidExtension(ext.toLowerCase());
        }
    }

    /**
     * Retourne la description du filtre.
     *
     * @return une chaine de caractères définissant le filtre
     * @see javax.swing.filechooser.FileFilter#getDescription()
     */
    @Override
    public String getDescription() {
        return "Fichiers d'images (jpeg, gif, png, bmp)";
    }

    @Override
    public String toString() {
        StringBuffer stb = new StringBuffer("Formats supportés: ");
        String[] formats = ExtensionsImages.getExtensions();
        for (int i = 0; i < formats.length; i++) {
            stb.append(formats[i] + ", ");
        }
        return stb.toString();
    }
}
